/*
 * Copyright 2006 Kevin Wetzels 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *       http://www.apache.org/licenses/LICENSE-2.0 
 *       
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License.
 */
package be.roam.drest.xml.rss;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * RSS 2.0 channel object.
 * 
 * @author Kevin Wetzels
 * @version 1.0
 */
public abstract class Rss20Channel<ItemType extends Rss20Item> {

    private String title;
    
    private String link;
    
    private String description;
    
    private String language;
    
    private String copyright;
    
    private String managementEditor;
    
    private String webMaster;
    
    private Date datePublication;
    
    private Date dateLastBuild;
    
    private String category;
    
    private String categoryDomain;
    
    private String generator;
    
    private String docs;
    
    private String cloudDomain;
    
    private String cloudPort;
    
    private String cloudPath;
    
    private String cloudRegisterProcedure;
    
    private String cloudProtocol;
    
    private int timeToLive;
    
    private String imageUrl;
    
    private String imageTitle;
    
    private String imageLink;
    
    private int imageWidth;
    
    private int imageHeight;
    
    private String imageDescription;
    
    private Set<Integer> skipHours;
    
    private Set<Integer> skipDays;
    
    private List<ItemType> itemList;

    /**
     * @return the category
     */
    public String getCategory() {
        return category;
    }

    /**
     * @param category the category to set
     */
    public void setCategory(String category) {
        this.category = category;
    }

    /**
     * @return the categoryDomain
     */
    public String getCategoryDomain() {
        return categoryDomain;
    }

    /**
     * @param categoryDomain the categoryDomain to set
     */
    public void setCategoryDomain(String categoryDomain) {
        this.categoryDomain = categoryDomain;
    }

    /**
     * @return the cloudDomain
     */
    public String getCloudDomain() {
        return cloudDomain;
    }

    /**
     * @param cloudDomain the cloudDomain to set
     */
    public void setCloudDomain(String cloudDomain) {
        this.cloudDomain = cloudDomain;
    }

    /**
     * @return the cloudPath
     */
    public String getCloudPath() {
        return cloudPath;
    }

    /**
     * @param cloudPath the cloudPath to set
     */
    public void setCloudPath(String cloudPath) {
        this.cloudPath = cloudPath;
    }

    /**
     * @return the cloudPort
     */
    public String getCloudPort() {
        return cloudPort;
    }

    /**
     * @param cloudPort the cloudPort to set
     */
    public void setCloudPort(String cloudPort) {
        this.cloudPort = cloudPort;
    }

    /**
     * @return the cloudRegisterProcedure
     */
    public String getCloudRegisterProcedure() {
        return cloudRegisterProcedure;
    }

    /**
     * @param cloudRegisterProcedure the cloudRegisterProcedure to set
     */
    public void setCloudRegisterProcedure(String cloudRegisterProcedure) {
        this.cloudRegisterProcedure = cloudRegisterProcedure;
    }

    /**
     * @return the copyright
     */
    public String getCopyright() {
        return copyright;
    }

    /**
     * @param copyright the copyright to set
     */
    public void setCopyright(String copyright) {
        this.copyright = copyright;
    }

    /**
     * @return the dateLastBuild
     */
    public Date getDateLastBuild() {
        return dateLastBuild;
    }

    /**
     * @param dateLastBuild the dateLastBuild to set
     */
    public void setDateLastBuild(Date dateLastBuild) {
        this.dateLastBuild = dateLastBuild;
    }

    /**
     * @return the datePublication
     */
    public Date getDatePublication() {
        return datePublication;
    }

    /**
     * @param datePublication the datePublication to set
     */
    public void setDatePublication(Date datePublication) {
        this.datePublication = datePublication;
    }

    /**
     * @return the description
     */
    public String getDescription() {
        return description;
    }

    /**
     * @param description the description to set
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * @return the docs
     */
    public String getDocs() {
        return docs;
    }

    /**
     * @param docs the docs to set
     */
    public void setDocs(String docs) {
        this.docs = docs;
    }

    /**
     * @return the generator
     */
    public String getGenerator() {
        return generator;
    }

    /**
     * @param generator the generator to set
     */
    public void setGenerator(String generator) {
        this.generator = generator;
    }

    /**
     * @return the imageDescription
     */
    public String getImageDescription() {
        return imageDescription;
    }

    /**
     * @param imageDescription the imageDescription to set
     */
    public void setImageDescription(String imageDescription) {
        this.imageDescription = imageDescription;
    }

    /**
     * @return the imageHeight
     */
    public int getImageHeight() {
        return imageHeight;
    }

    /**
     * @param imageHeight the imageHeight to set
     */
    public void setImageHeight(int imageHeight) {
        this.imageHeight = imageHeight;
    }

    /**
     * @return the imageLink
     */
    public String getImageLink() {
        return imageLink;
    }

    /**
     * @param imageLink the imageLink to set
     */
    public void setImageLink(String imageLink) {
        this.imageLink = imageLink;
    }

    /**
     * @return the imageTitle
     */
    public String getImageTitle() {
        return imageTitle;
    }

    /**
     * @param imageTitle the imageTitle to set
     */
    public void setImageTitle(String imageTitle) {
        this.imageTitle = imageTitle;
    }

    /**
     * @return the imageUrl
     */
    public String getImageUrl() {
        return imageUrl;
    }

    /**
     * @param imageUrl the imageUrl to set
     */
    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }

    /**
     * @return the imageWidth
     */
    public int getImageWidth() {
        return imageWidth;
    }

    /**
     * @param imageWidth the imageWidth to set
     */
    public void setImageWidth(int imageWidth) {
        this.imageWidth = imageWidth;
    }

    /**
     * @return the itemList
     */
    public List<ItemType> getItemList() {
        return itemList;
    }

    /**
     * @param itemList the itemList to set
     */
    public void setItemList(List<ItemType> itemList) {
        this.itemList = itemList;
    }

    public abstract void addItem(ItemType item);
    
    /**
     * @return the language
     */
    public String getLanguage() {
        return language;
    }

    /**
     * @param language the language to set
     */
    public void setLanguage(String language) {
        this.language = language;
    }

    /**
     * @return the link
     */
    public String getLink() {
        return link;
    }

    /**
     * @param link the link to set
     */
    public void setLink(String link) {
        this.link = link;
    }

    /**
     * @return the managementEditor
     */
    public String getManagementEditor() {
        return managementEditor;
    }

    /**
     * @param managementEditor the managementEditor to set
     */
    public void setManagementEditor(String managementEditor) {
        this.managementEditor = managementEditor;
    }

    /**
     * @return the cloudProtocol
     */
    public String getCloudProtocol() {
        return cloudProtocol;
    }

    /**
     * @param cloudProtocol the cloudProtocol to set
     */
    public void setCloudProtocol(String cloudProtocol) {
        this.cloudProtocol = cloudProtocol;
    }

    /**
     * @return the skipDays
     */
    public Set<Integer> getSkipDays() {
        return skipDays;
    }

    /**
     * @param skipDays the skipDays to set
     */
    public void setSkipDays(Set<Integer> skipDays) {
        this.skipDays = skipDays;
    }

    /**
     * @return the skipHours
     */
    public Set<Integer> getSkipHours() {
        return skipHours;
    }

    /**
     * @param skipHours the skipHours to set
     */
    public void setSkipHours(Set<Integer> skipHours) {
        this.skipHours = skipHours;
    }

    /**
     * @return the timeToLive
     */
    public int getTimeToLive() {
        return timeToLive;
    }

    /**
     * @param timeToLive the timeToLive to set
     */
    public void setTimeToLive(int timeToLive) {
        this.timeToLive = timeToLive;
    }

    /**
     * @return the title
     */
    public String getTitle() {
        return title;
    }

    /**
     * @param title the title to set
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * @return the webMaster
     */
    public String getWebMaster() {
        return webMaster;
    }

    /**
     * @param webMaster the webMaster to set
     */
    public void setWebMaster(String webMaster) {
        this.webMaster = webMaster;
    }
    
    
    
}
